home *** CD-ROM | disk | FTP | other *** search
/ All for Cell Phones: Sony Ericsson / Sony-Ericsson 2004.iso / Java / CalcM50 / CalcM50.jar / CalcCanvas.class (.txt) < prev    next >
Encoding:
Java Class File  |  2002-10-22  |  5.4 KB  |  245 lines

  1. import henriautio.FPMidp;
  2. import javax.microedition.lcdui.Canvas;
  3. import javax.microedition.lcdui.Display;
  4. import javax.microedition.lcdui.Font;
  5. import javax.microedition.lcdui.Graphics;
  6.  
  7. class CalcCanvas extends Canvas {
  8.    String[] OPERATORS = new String[]{"", "+", "-", "*", "/"};
  9.    private boolean browse = false;
  10.    private int digits = 0;
  11.    private int digits2 = 0;
  12.    private boolean erase = false;
  13.    // $FF: renamed from: f henriautio.FPMidp
  14.    private FPMidp field_0 = new FPMidp();
  15.    private final int CLEAR = 0;
  16.    private final int ASNW = 1;
  17.    private final int OPERATOR = 2;
  18.    private int STAGE = 0;
  19.    private static Display display;
  20.    private static Backable goBack;
  21.    private int prevOperator = 0;
  22.    private String number = "";
  23.    private String number2 = "";
  24.    private int operator = 0;
  25.    private boolean decimal = false;
  26.    // $FF: renamed from: y int
  27.    private int field_1 = 0;
  28.    // $FF: renamed from: x int
  29.    private int field_2 = 0;
  30.    private String value = new String();
  31.  
  32.    public CalcCanvas() {
  33.    }
  34.  
  35.    public void show(Display disp, Backable goBack) {
  36.       display = disp;
  37.       CalcCanvas.goBack = goBack;
  38.       disp.setCurrent(this);
  39.    }
  40.  
  41.    protected void paint(Graphics g) {
  42.       this.erase = false;
  43.       g.setColor(255, 255, 255);
  44.       g.fillRect(0, 0, 101, 64);
  45.       g.setColor(0, 0, 0);
  46.       g.setFont(Font.getFont(64, 1, 8));
  47.       g.drawString("CalcM50         v0.6", 0, 11, 0);
  48.       g.setFont(Font.getDefaultFont());
  49.       g.drawString("Exit", 0, 65, 0);
  50.       g.drawString("Options", 62, 65, 0);
  51.       if (this.browse) {
  52.          g.drawString(this.OPERATORS[this.operator], 94, 50, 0);
  53.          g.drawString(this.number2, 94 - (this.digits2 - 1) * 6, 37, 0);
  54.       } else if (this.operator > 0) {
  55.          g.drawString(this.number2, 94 - (this.digits2 - 1) * 6, 24, 0);
  56.          g.drawString(this.OPERATORS[this.operator], 94, 37, 0);
  57.          g.drawString(this.number, 94 - (this.digits - 1) * 6, 50, 0);
  58.       } else if (this.digits > 0) {
  59.          g.drawString(this.number, 94 - (this.digits - 1) * 6, 50, 0);
  60.       } else {
  61.          g.drawString("0", 94, 50, 0);
  62.       }
  63.  
  64.    }
  65.  
  66.    protected void keyPressed(int keyCode) {
  67.       this.value = (new Integer(keyCode)).toString();
  68.       switch (keyCode) {
  69.          case -12:
  70.             this.erase = true;
  71.             if (this.operator > 0 && this.digits == 0 && this.digits2 > 0) {
  72.                this.operator = 0;
  73.                this.number = this.number2;
  74.                this.digits = this.digits2;
  75.                this.digits2 = 0;
  76.                this.number2 = "";
  77.                this.erase = true;
  78.                this.browse = false;
  79.             } else if (this.digits > 0) {
  80.                if (this.number.charAt(this.number.length() - 1) == ',') {
  81.                   this.decimal = false;
  82.                }
  83.  
  84.                this.number = this.number.substring(0, this.number.length() - 1);
  85.                --this.digits;
  86.                if (this.number.length() == 1) {
  87.                   if (this.number.charAt(0) == '-') {
  88.                      this.number = "";
  89.                      this.digits = 0;
  90.                   }
  91.                } else if (this.number.length() == 2 && this.number.charAt(0) == '-' && this.number.charAt(1) == '0') {
  92.                   this.number = "";
  93.                   this.digits = 0;
  94.                }
  95.             }
  96.             break;
  97.          case -11:
  98.             if (this.digits > 0) {
  99.                if (this.number.charAt(0) == '-') {
  100.                   this.number = this.number.substring(1, this.number.length());
  101.                   --this.digits;
  102.                } else {
  103.                   ++this.digits;
  104.                   this.number = "-".concat(String.valueOf(String.valueOf(this.number)));
  105.                }
  106.             }
  107.             break;
  108.          case -1:
  109.             goBack.show();
  110.             break;
  111.          case 35:
  112.             if (this.digits == 1 && this.number.charAt(0) == 'E') {
  113.                this.digits = 0;
  114.                this.number = "";
  115.             } else if (this.digits > 0 && this.digits2 > 0) {
  116.                this.calculate();
  117.                this.operator = 0;
  118.                this.browse = false;
  119.             } else if (this.digits > 0 || this.browse) {
  120.                if (this.number2.length() == 0) {
  121.                   this.decimal = false;
  122.                   this.number2 = this.number;
  123.                   this.digits2 = this.digits;
  124.                   this.digits = 0;
  125.                   this.number = "";
  126.                }
  127.  
  128.                this.nextOperator();
  129.                this.erase = true;
  130.             }
  131.             break;
  132.          case 42:
  133.             this.addNumber(",");
  134.             break;
  135.          case 48:
  136.             this.addNumber("0");
  137.             break;
  138.          case 49:
  139.             this.addNumber("1");
  140.             break;
  141.          case 50:
  142.             this.addNumber("2");
  143.             break;
  144.          case 51:
  145.             this.addNumber("3");
  146.             break;
  147.          case 52:
  148.             this.addNumber("4");
  149.             break;
  150.          case 53:
  151.             this.addNumber("5");
  152.             break;
  153.          case 54:
  154.             this.addNumber("6");
  155.             break;
  156.          case 55:
  157.             this.addNumber("7");
  158.             break;
  159.          case 56:
  160.             this.addNumber("8");
  161.             break;
  162.          case 57:
  163.             this.addNumber("9");
  164.             break;
  165.          default:
  166.             return;
  167.       }
  168.  
  169.       ((Canvas)this).repaint();
  170.    }
  171.  
  172.    private void nextOperator() {
  173.       this.browse = true;
  174.       ++this.operator;
  175.       if (this.operator > 4) {
  176.          this.operator = 1;
  177.       }
  178.  
  179.    }
  180.  
  181.    private void addNumber(String s) {
  182.       if (this.digits == 1 && this.number.charAt(0) == 'E') {
  183.          this.number = "";
  184.          this.digits = 0;
  185.       }
  186.  
  187.       if (s.charAt(0) != ',' || !this.decimal) {
  188.          if (this.browse) {
  189.             this.browse = false;
  190.             this.erase = true;
  191.             this.prevOperator = this.operator;
  192.             this.digits = 0;
  193.             this.number = "";
  194.          }
  195.  
  196.          if (this.digits < 10) {
  197.             if (this.digits == 0 && s.charAt(0) == ',') {
  198.                this.decimal = true;
  199.                this.number = String.valueOf(String.valueOf(this.number)).concat("0,");
  200.                this.digits += 2;
  201.             } else if (s.charAt(0) == ',') {
  202.                this.decimal = true;
  203.                this.number = String.valueOf(String.valueOf(this.number)).concat(",");
  204.                ++this.digits;
  205.             } else {
  206.                this.number = String.valueOf(String.valueOf(this.number)).concat(String.valueOf(String.valueOf(s)));
  207.                ++this.digits;
  208.             }
  209.          }
  210.  
  211.       }
  212.    }
  213.  
  214.    private void calculate() {
  215.       switch (this.operator) {
  216.          case 1:
  217.             this.field_0.setValues(this.number, this.number2);
  218.             this.number = this.field_0.addition();
  219.             break;
  220.          case 2:
  221.             this.field_0.setValues(this.number, this.number2);
  222.             this.number = this.field_0.subtraction();
  223.             break;
  224.          case 3:
  225.             this.field_0.setValues(this.number, this.number2);
  226.             this.number = this.field_0.multiplication();
  227.             break;
  228.          case 4:
  229.             this.field_0.setValues(this.number, this.number2);
  230.             this.number = this.field_0.division();
  231.             break;
  232.          default:
  233.             return;
  234.       }
  235.  
  236.       this.digits = this.number.length();
  237.       this.number2 = "";
  238.       this.digits2 = 0;
  239.       this.operator = 0;
  240.       this.decimal = false;
  241.       this.erase = true;
  242.       this.browse = false;
  243.    }
  244. }
  245.